package isanfeng.tuxiaoer.pattern.creational.Cabstractfactory;

import isanfeng.tuxiaoer.pattern.creational.Cabstractfactory.model.Article;
import isanfeng.tuxiaoer.pattern.creational.Cabstractfactory.model.Video;

/**
 * 抽象工厂【强调产品族的概念】
 * 定义：
 *   抽象工厂模式提供一个创建一系列相关或相互依赖对象的接口，无须指定它们具体的类。
 * 适用场景：
 *  客户端（应用层）不依赖产品类实例如何被创建、实现等细节
 *  强调一系列相关的产品对象（属于同一产品族）一起使用创建对象，需要大量重复的代码
 *  提供一个产品类的库，所有的产品以同样的接口出现，从而使客户端不依赖于具体实现。
 * 优点：
 *  具体产品在应用层代码隔离，无须关心创建细节
 *  将一个系列的产品族统一到一起创建
 * 缺点：
 *  规定了所有可能被创建的产品集合，产品族中扩展新的产品困难，需要修改抽象工厂的接口
 *  增加了系统的抽象性和理解难度。
 * @author 李红辉
 * @version 1.0
 * @date 2019/9/27 18:20
 */
public class Test {
    public static void main(String[] args) {
        CourseFactory courseFactory = new JavaCourseFactory();
        Video video = courseFactory.getVideo();
        Article article = courseFactory.getArticle();
        video.produce();
        article.produce();
    }
}
